import { app, BrowserWindow, ipcMain } from 'electron'
// 注意这个autoUpdater不是electron中的autoUpdater
// electron
const electron = require('electron')
const path = require('path')
const nativeImage = require('electron').nativeImage
import { handleUpdate } from './autoUpdate'
// 用一个 Tray 来表示一个图标,这个图标处于正在运行的系统的通知区 ，通常被添加到一个 context menu 上.
const Menu = electron.Menu
const Tray = electron.Tray
// 托盘对象
let appTray = null
/**
 * Set `__static` path to static files in production
 * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
 */
if (process.env.NODE_ENV !== 'development') {
  global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
}

// 新建更新窗口
let closeWin = null
const closeWinURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:9080/close`
  : `file://${__dirname}/close/index.html`
let mainWindow = null
const winURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:9080/main`
  : `file://${__dirname}/main/index.html`

function createWindow() {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    height: 563,
    useContentSize: true,
    width: 1000,
    webPreferences: {
      nodeIntegration: true
    }
  })

  mainWindow.loadURL(winURL)
  // mainWindow.webContents.openDevTools()

  // 系统托盘右键菜单
  var trayMenuTemplate = [
    {
      label: '设置',
      click: function() {} // 打开相应页面
    },
    {
      label: '帮助',
      click: function() {}
    },
    {
      label: '关于',
      click: function() {}
    },
    {
      label: '退出',
      click: function() {
        app.quit()
        // appTray.destroy()
        mainWindow.destroy()
        // app.quit()// 因为程序设定关闭为最小化，所以调用两次关闭，防止最大化时一次不能关闭的情况
      }
    }
  ]

  // 系统托盘图标目录
  if (process.env.NODE_ENV !== 'development') {
    appTray = new Tray(nativeImage.createFromPath(path.join(__dirname, '../../../icon.ico')))// app.ico是app目录下的ico文件
  } else {
    appTray = new Tray(nativeImage.createFromPath('build/icons/icon.ico'))// app.ico是app目录下的ico文件
  }
  // 图标的上下文菜单
  const contextMenu = Menu.buildFromTemplate(trayMenuTemplate)

  // 设置此托盘图标的悬停提示内容
  appTray.setToolTip('我的托盘图标')

  // 设置此图标的上下文菜单
  appTray.setContextMenu(contextMenu)
  // 单击右下角小图标显示应用
  appTray.on('click', function() {
    mainWindow.show()
  })

  mainWindow.on('close', (e) => {
    e.preventDefault()
    // 回收BrowserWindow对象
    mainWindow.webContents.send('closeMainWin')
  })

  // 系统托盘图标闪烁
  var count = 0
  setInterval(function() {
    count++
    if (count % 2 === 0) {
      // 系统托盘图标目录
      if (process.env.NODE_ENV !== 'development') {
        appTray.setImage(nativeImage.createFromPath(path.join(__dirname, '../../../empty.ico')))// app.ico是app目录下的ico文件
      } else {
        appTray.setImage(nativeImage.createFromPath('build/icons/empty.ico'))// app.ico是app目录下的ico文件
      }
    } else {
      // 系统托盘图标目录
      if (process.env.NODE_ENV !== 'development') {
        appTray.setImage(nativeImage.createFromPath(path.join(__dirname, '../../../icon.ico')))// app.ico是app目录下的ico文件
      } else {
        appTray.setImage(nativeImage.createFromPath('build/icons/icon.ico'))// app.ico是app目录下的ico文件
      }
    }
  }, 500)
}

/**
 * 最小化到托盘
 */
ipcMain.on('minimizeCloseWin', () => {
  if (!mainWindow.isMinimized()) {
    // mainWindow.minimize()
    mainWindow.hide()
    mainWindow.setSkipTaskbar(true)
    closeWin.destroy()
  } else {
    mainWindow = null
  }
})
ipcMain.on('closeMainWin', () => {
  app.quit()
  mainWindow.destroy()
})

ipcMain.on('closeCloseWin', () => {
  closeWin.destroy()
})
// 新建更新窗口
ipcMain.on('addCloseWin', () => {
  closeWin = new BrowserWindow({
    width: 400,
    height: 200,
    title: '关闭提示',
    useContentSize: true,
    webPreferences: {
      nodeIntegration: true
    },
    parent: mainWindow // mainWindow是主窗口
  })
  closeWin.loadURL(closeWinURL) // closeWin.html是新开窗口的渲染进程
  // closeWin.webContents.openDevTools()
  closeWin.on('closed', () => { closeWin = null })
})
// ==========================================================
// 限制只可以打开一个应用,2.x的文档 https://www.cnblogs.com/ybixian/p/11169027.html
const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => {
  // Someone tried to run a second instance, we should focus our window.
  if (mainWindow) {
    if (mainWindow.isMinimized()) mainWindow.restore()
    mainWindow.focus()
    mainWindow.show()
  }
})

if (isSecondInstance) {
  app.quit()
}

// 限制只可以打开一个应用, 4.x的文档
// const gotTheLock = app.requestSingleInstanceLock()
// if (!gotTheLock) {
//   app.quit()
// } else {
//   app.on('second-instance', (event, commandLine, workingDirectory) => {
//     // 当运行第二个实例时,将会聚焦到mainWindow这个窗口
//     if (mainWindow) {
//       if (mainWindow.isMinimized()) mainWindow.restore()
//       mainWindow.focus()
//       mainWindow.show()
//     }
//   })
//   // 创建 myWindow, 加载应用的其余部分, etc...
//   // app.on('ready', () => {
//   // })
// }

app.on('ready', () => {
  createWindow()
  handleUpdate(mainWindow, destroyMainWindow)
})

function destroyMainWindow() {
  mainWindow = null
}

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (mainWindow === null) {
    createWindow()
  }
})

/**
 * Auto Updater
 *
 * Uncomment the following code below and install `electron-updater` to
 * support auto updating. Code Signing with a valid certificate is required.
 * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-builder.html#auto-updating
 */

/*
import { autoUpdater } from 'electron-updater'

autoUpdater.on('update-downloaded', () => {
  autoUpdater.quitAndInstall()
})

app.on('ready', () => {
  if (process.env.NODE_ENV === 'production') autoUpdater.checkForUpdates()
})
 */
